[INFO] fetching crate rustorch 0.6.29...
[INFO] checking rustorch-0.6.29 against try#2cbf9c3ff35600794d69a7dc7ab399810a067910 for pr-129249-2
[INFO] extracting crate rustorch 0.6.29 into /workspace/builds/worker-2-tc2/source
[INFO] removed /workspace/builds/worker-2-tc2/source/.cargo/config.toml
[INFO] started tweaking crates.io crate rustorch 0.6.29
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate rustorch 0.6.29
[INFO] tweaked toml for crates.io crate rustorch 0.6.29 written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate rustorch 0.6.29 on toolchain 2cbf9c3ff35600794d69a7dc7ab399810a067910
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+2cbf9c3ff35600794d69a7dc7ab399810a067910" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate rustorch 0.6.29 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+2cbf9c3ff35600794d69a7dc7ab399810a067910" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3a6becf2bc8dde7f3fa57ede90e4f284e72d296796fc446bbb1e2c7cc0530151" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805
[INFO] running `Command { std: "docker" "start" "9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805" "/opt/rustwide/cargo-home/bin/cargo" "+2cbf9c3ff35600794d69a7dc7ab399810a067910" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805" "/opt/rustwide/cargo-home/bin/cargo" "+2cbf9c3ff35600794d69a7dc7ab399810a067910" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libm v0.2.15
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling wasm-bindgen-shared v0.2.101
[INFO] [stderr]    Compiling zerocopy v0.8.27
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking memchr v2.7.5
[INFO] [stderr]    Compiling serde_json v1.0.143
[INFO] [stderr]    Compiling bumpalo v3.19.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling log v0.4.28
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]     Checking half v2.6.0
[INFO] [stderr]     Checking rawpointer v0.2.1
[INFO] [stderr]     Checking regex-syntax v0.8.6
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]     Checking unicode-ident v1.0.18
[INFO] [stderr]    Compiling wasm-bindgen v0.2.101
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]     Checking parking_lot_core v0.9.11
[INFO] [stderr]     Checking aho-corasick v1.1.3
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling rustorch v0.6.29 (/opt/rustwide/workdir)
[INFO] [stderr]     Checking iana-time-zone v0.1.63
[INFO] [stderr]     Checking hostname v0.4.1
[INFO] [stderr]     Checking num_cpus v1.17.0
[INFO] [stderr]     Checking ciborium-io v0.2.2
[INFO] [stderr]     Checking plotters-backend v0.3.7
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]     Checking parking_lot v0.12.4
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling rustix v1.0.8
[INFO] [stderr]     Checking clap_builder v4.5.47
[INFO] [stderr]     Checking ciborium-ll v0.2.2
[INFO] [stderr]     Checking indexmap v2.11.4
[INFO] [stderr]     Checking itertools v0.10.5
[INFO] [stderr]     Checking plotters-svg v0.3.7
[INFO] [stderr]     Checking crossbeam-deque v0.8.6
[INFO] [stderr]     Checking linux-raw-sys v0.9.4
[INFO] [stderr]     Checking cast v0.3.0
[INFO] [stderr]     Checking same-file v1.0.6
[INFO] [stderr]     Checking bitflags v2.9.4
[INFO] [stderr]     Checking walkdir v2.5.0
[INFO] [stderr]     Checking is-terminal v0.4.16
[INFO] [stderr]     Checking oorandom v11.1.5
[INFO] [stderr]     Checking fastrand v2.3.0
[INFO] [stderr]     Checking anes v0.1.6
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]     Checking criterion-plot v0.5.0
[INFO] [stderr]     Checking regex-automata v0.4.10
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking plotters v0.3.7
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking clap v4.5.47
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking tempfile v3.21.0
[INFO] [stderr]     Checking rand_distr v0.4.3
[INFO] [stderr]     Checking ndarray v0.16.1
[INFO] [stderr]     Checking regex v1.11.2
[INFO] [stderr]    Compiling wasm-bindgen-backend v0.2.101
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling rustorch-macros v0.6.29
[INFO] [stderr]    Compiling wasm-bindgen-test-macro v0.3.51
[INFO] [stderr]    Compiling wasm-bindgen-macro-support v0.2.101
[INFO] [stderr]    Compiling wasm-bindgen-macro v0.2.101
[INFO] [stderr]     Checking ndarray-rand v0.15.0
[INFO] [stderr]     Checking js-sys v0.3.78
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking chrono v0.4.41
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking ciborium v0.2.2
[INFO] [stderr]     Checking tinytemplate v1.2.1
[INFO] [stderr]     Checking criterion v0.5.1
[INFO] [stderr]     Checking wasm-bindgen-futures v0.4.51
[INFO] [stderr]     Checking wasm-bindgen-test v0.3.51
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:614:44
[INFO] [stdout]     |
[INFO] [stdout] 614 |             self.matmul(other).map_err(|e| e.into())
[INFO] [stdout]     |                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[warn(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:624:13
[INFO] [stdout]     |
[INFO] [stdout] 624 |           Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _____________^
[INFO] [stdout] 625 | |             "GPU reduce not available without CUDA".to_string(),
[INFO] [stdout] 626 | |         )
[INFO] [stdout] 627 | |         .into())
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:694:17
[INFO] [stdout]     |
[INFO] [stdout] 694 |               Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 695 | |                 "No GPU acceleration available (enable metal, coreml, or mac-hybrid features)"
[INFO] [stdout] 696 | |                     .to_string(),
[INFO] [stdout] 697 | |             )
[INFO] [stdout] 698 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/transforms.rs:84:60
[INFO] [stdout]    |
[INFO] [stdout] 84 |         Image::new(resized_data, image.format).map_err(|e| e.into())
[INFO] [stdout]    |                                                            ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:110:24
[INFO] [stdout]     |
[INFO] [stdout] 110 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 111 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 112 | |                 crop_height, crop_width, image.height, image.width
[INFO] [stdout] 113 | |             ))
[INFO] [stdout] 114 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:131:60
[INFO] [stdout]     |
[INFO] [stdout] 131 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:181:24
[INFO] [stdout]     |
[INFO] [stdout] 181 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 182 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 183 | |                 crop_height, crop_width, working_image.height, working_image.width
[INFO] [stdout] 184 | |             ))
[INFO] [stdout] 185 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:202:60
[INFO] [stdout]     |
[INFO] [stdout] 202 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:297:24
[INFO] [stdout]     |
[INFO] [stdout] 297 |               return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 298 | |                 "Mean and std must have same length".to_string(),
[INFO] [stdout] 299 | |             )
[INFO] [stdout] 300 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:327:24
[INFO] [stdout]     |
[INFO] [stdout] 327 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 328 | |                 "Mean length {} doesn't match image channels {}",
[INFO] [stdout] 329 | |                 self.mean.len(),
[INFO] [stdout] 330 | |                 image.channels
[INFO] [stdout] 331 | |             ))
[INFO] [stdout] 332 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:377:50
[INFO] [stdout]     |
[INFO] [stdout] 377 |         image.to_format(self.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                  ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/utils.rs:55:59
[INFO] [stdout]    |
[INFO] [stdout] 55 |     Image::new(grid_tensor, images[0].format).map_err(|e| e.into())
[INFO] [stdout]    |                                                           ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:96:24
[INFO] [stdout]     |
[INFO] [stdout]  96 |               return Err(RusTorchError::InvalidImageShape(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout]  97 | |                 "Expected 2D or 3D tensor, got {:?}",
[INFO] [stdout]  98 | |                 shape
[INFO] [stdout]  99 | |             ))
[INFO] [stdout] 100 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:104:52
[INFO] [stdout]     |
[INFO] [stdout] 104 |     Image::new(tensor.clone(), format).map_err(|e| e.into())
[INFO] [stdout]     |                                                    ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:124:20
[INFO] [stdout]     |
[INFO] [stdout] 124 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 125 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 126 | |         )
[INFO] [stdout] 127 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:146:20
[INFO] [stdout]     |
[INFO] [stdout] 146 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 147 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 148 | |         )
[INFO] [stdout] 149 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:278:24
[INFO] [stdout]     |
[INFO] [stdout] 278 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 279 | |                 "X and Y data must have the same non-zero length".to_string(),
[INFO] [stdout] 280 | |             )
[INFO] [stdout] 281 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:347:28
[INFO] [stdout]     |
[INFO] [stdout] 347 |                   return Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  ____________________________^
[INFO] [stdout] 348 | |                     "Metric '{}' has no values",
[INFO] [stdout] 349 | |                     metric_name
[INFO] [stdout] 350 | |                 ))
[INFO] [stdout] 351 | |                 .into());
[INFO] [stdout]     | |_______________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:355:17
[INFO] [stdout]     |
[INFO] [stdout] 355 |               Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 356 | |                 "Metric '{}' not found in training history",
[INFO] [stdout] 357 | |                 metric_name
[INFO] [stdout] 358 | |             ))
[INFO] [stdout] 359 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:373:24
[INFO] [stdout]     |
[INFO] [stdout] 373 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 374 | |                 "Training history contains no data".to_string(),
[INFO] [stdout] 375 | |             )
[INFO] [stdout] 376 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:392:24
[INFO] [stdout]     |
[INFO] [stdout] 392 |               return Err(RusTorchError::ConfigError(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 393 | |                 "Cannot plot empty training history".to_string(),
[INFO] [stdout] 394 | |             )
[INFO] [stdout] 395 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around closure body
[INFO] [stdout]    --> benches/multi_gpu_benchmark.rs:354:65
[INFO] [stdout]     |
[INFO] [stdout] 354 |                     let grad_data: Vec<f32> = (0..size).map(|j| (j as f32 * 0.001)).collect();
[INFO] [stdout]     |                                                                 ^                ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 354 -                     let grad_data: Vec<f32> = (0..size).map(|j| (j as f32 * 0.001)).collect();
[INFO] [stdout] 354 +                     let grad_data: Vec<f32> = (0..size).map(|j| j as f32 * 0.001).collect();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:12:9
[INFO] [stdout]    |
[INFO] [stdout] 12 |     let d = &a - &b; // Element-wise subtraction
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 |     let e = &a * &b; // Element-wise multiplication
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `f`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 |     let f = &a / &b; // Element-wise division
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_f`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `g`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 17 |     let g = &a + 10.0; // Add scalar to all elements
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_g`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `h`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 18 |     let h = &a * 2.0; // Multiply by scalar
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_h`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `exp_result`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let exp_result = a.exp(); // Exponential function
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exp_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ln_result`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 22 |     let ln_result = a.ln(); // Natural logarithm
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ln_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sin_result`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 23 |     let sin_result = a.sin(); // Sine function
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sin_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sqrt_result`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     let sqrt_result = a.sqrt(); // Square root
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sqrt_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `matmul_result`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |     let matmul_result = a.matmul(&b); // Matrix multiplication
[INFO] [stdout]    |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matmul_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scheduler`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 |     let scheduler = WarmupScheduler::new(optimizer, 0.1, 5); // Warmup to 0.1 over 5 epochs
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scheduler`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `one_cycle`
[INFO] [stdout]   --> examples/readme_basic_usage_demo.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 43 |     let one_cycle = OneCycleLR::new(optimizer2, 1.0, 100, 0.3, AnnealStrategy::Cos);
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_one_cycle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::option::Option<u64>`
[INFO] [stdout]    --> src/distributed/data_parallel.rs:526:72
[INFO] [stdout]     |
[INFO] [stdout] 526 |         let loader = DistributedDataLoader::new(data, labels, 2, true, Some(42).into());
[INFO] [stdout]     |                                                                        ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::option::Option<u64> as Into<std::option::Option<u64>>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[warn(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:614:44
[INFO] [stdout]     |
[INFO] [stdout] 614 |             self.matmul(other).map_err(|e| e.into())
[INFO] [stdout]     |                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:624:13
[INFO] [stdout]     |
[INFO] [stdout] 624 |           Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _____________^
[INFO] [stdout] 625 | |             "GPU reduce not available without CUDA".to_string(),
[INFO] [stdout] 626 | |         )
[INFO] [stdout] 627 | |         .into())
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/tensor/gpu_parallel.rs:694:17
[INFO] [stdout]     |
[INFO] [stdout] 694 |               Err(crate::error::RusTorchError::tensor_op(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 695 | |                 "No GPU acceleration available (enable metal, coreml, or mac-hybrid features)"
[INFO] [stdout] 696 | |                     .to_string(),
[INFO] [stdout] 697 | |             )
[INFO] [stdout] 698 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/transforms.rs:84:60
[INFO] [stdout]    |
[INFO] [stdout] 84 |         Image::new(resized_data, image.format).map_err(|e| e.into())
[INFO] [stdout]    |                                                            ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:110:24
[INFO] [stdout]     |
[INFO] [stdout] 110 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 111 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 112 | |                 crop_height, crop_width, image.height, image.width
[INFO] [stdout] 113 | |             ))
[INFO] [stdout] 114 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:131:60
[INFO] [stdout]     |
[INFO] [stdout] 131 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:181:24
[INFO] [stdout]     |
[INFO] [stdout] 181 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 182 | |                 "Crop size ({}, {}) larger than image size ({}, {})",
[INFO] [stdout] 183 | |                 crop_height, crop_width, working_image.height, working_image.width
[INFO] [stdout] 184 | |             ))
[INFO] [stdout] 185 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:202:60
[INFO] [stdout]     |
[INFO] [stdout] 202 |         Image::new(cropped_data, image.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                            ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:297:24
[INFO] [stdout]     |
[INFO] [stdout] 297 |               return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 298 | |                 "Mean and std must have same length".to_string(),
[INFO] [stdout] 299 | |             )
[INFO] [stdout] 300 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:327:24
[INFO] [stdout]     |
[INFO] [stdout] 327 |               return Err(RusTorchError::InvalidTransformParams(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 328 | |                 "Mean length {} doesn't match image channels {}",
[INFO] [stdout] 329 | |                 self.mean.len(),
[INFO] [stdout] 330 | |                 image.channels
[INFO] [stdout] 331 | |             ))
[INFO] [stdout] 332 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/transforms.rs:377:50
[INFO] [stdout]     |
[INFO] [stdout] 377 |         image.to_format(self.format).map_err(|e| e.into())
[INFO] [stdout]     |                                                  ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]   --> src/vision/utils.rs:55:59
[INFO] [stdout]    |
[INFO] [stdout] 55 |     Image::new(grid_tensor, images[0].format).map_err(|e| e.into())
[INFO] [stdout]    |                                                           ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]    = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:96:24
[INFO] [stdout]     |
[INFO] [stdout]  96 |               return Err(RusTorchError::InvalidImageShape(format!(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout]  97 | |                 "Expected 2D or 3D tensor, got {:?}",
[INFO] [stdout]  98 | |                 shape
[INFO] [stdout]  99 | |             ))
[INFO] [stdout] 100 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:104:52
[INFO] [stdout]     |
[INFO] [stdout] 104 |     Image::new(tensor.clone(), format).map_err(|e| e.into())
[INFO] [stdout]     |                                                    ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:124:20
[INFO] [stdout]     |
[INFO] [stdout] 124 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 125 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 126 | |         )
[INFO] [stdout] 127 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/vision/utils.rs:146:20
[INFO] [stdout]     |
[INFO] [stdout] 146 |           return Err(RusTorchError::InvalidTransformParams(
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 147 | |             "Mean and std must have same length".to_string(),
[INFO] [stdout] 148 | |         )
[INFO] [stdout] 149 | |         .into());
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:278:24
[INFO] [stdout]     |
[INFO] [stdout] 278 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 279 | |                 "X and Y data must have the same non-zero length".to_string(),
[INFO] [stdout] 280 | |             )
[INFO] [stdout] 281 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:347:28
[INFO] [stdout]     |
[INFO] [stdout] 347 |                   return Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  ____________________________^
[INFO] [stdout] 348 | |                     "Metric '{}' has no values",
[INFO] [stdout] 349 | |                     metric_name
[INFO] [stdout] 350 | |                 ))
[INFO] [stdout] 351 | |                 .into());
[INFO] [stdout]     | |_______________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:355:17
[INFO] [stdout]     |
[INFO] [stdout] 355 |               Err(RusTorchError::InvalidDataFormat(format!(
[INFO] [stdout]     |  _________________^
[INFO] [stdout] 356 | |                 "Metric '{}' not found in training history",
[INFO] [stdout] 357 | |                 metric_name
[INFO] [stdout] 358 | |             ))
[INFO] [stdout] 359 | |             .into())
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:373:24
[INFO] [stdout]     |
[INFO] [stdout] 373 |               return Err(RusTorchError::InvalidDataFormat(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 374 | |                 "Training history contains no data".to_string(),
[INFO] [stdout] 375 | |             )
[INFO] [stdout] 376 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `error::RusTorchError`
[INFO] [stdout]    --> src/visualization/plotting.rs:392:24
[INFO] [stdout]     |
[INFO] [stdout] 392 |               return Err(RusTorchError::ConfigError(
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 393 | |                 "Cannot plot empty training history".to_string(),
[INFO] [stdout] 394 | |             )
[INFO] [stdout] 395 | |             .into());
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<error::RusTorchError as Into<error::RusTorchError>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 21.67s
[INFO] running `Command { std: "docker" "inspect" "9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805", kill_on_drop: false }`
[INFO] [stdout] 9899e0cae2aa4a6c29cc4c80011f89929b369d775f2590fb6680c546e5f23805
